package queue

import "time"

const (
	HeaderTopic     = "topic"
	HeaderDelivery  = "delivery"
	HeaderExpiredAt = "expired_at"
)

type (
	IQueueMessage interface {
		GetId() string                           // 获取消息id
		GetTopic() string                        // 获取消息topic
		GetPayload() []byte                      // 获取数据载荷
		GetHeader(key string) interface{}        // 获取消息头信息
		SetHeader(key string, value interface{}) // 设置消息头信息
		IsExpired() bool                         // 是否过期，过期时间是进入队列时间+ttl
	}
)

type QueueMessgae struct {
	Id      string                 `json:"id"`      //消息id
	Payload []byte                 `json:"payload"` //消息体
	Headers map[string]interface{} `json:"headers"` //消息头，包含：expired_at过期时间戳，delivery 投递次数，topic主题
}

func (m *QueueMessgae) GetId() string {
	return m.Id
}

func (m *QueueMessgae) GetTopic() string {
	return m.Headers["topic"].(string)
}

func (m *QueueMessgae) GetPayload() []byte {
	return m.Payload
}

func (m *QueueMessgae) GetHeader(key string) interface{} {
	return m.Headers[key]
}

func (m *QueueMessgae) SetHeader(key string, value interface{}) {
	m.Headers[key] = value
}

func (m *QueueMessgae) IsExpired() bool {
	if expiredAt, ok := m.Headers["expired_at"].(int64); ok {
		return time.Now().Unix() > expiredAt
	}
	return false
}
